#===istalismanplugin===
# -*- coding: utf-8 -*-

# $Revision: 67 $
# $Author: rchiganov@gmail.com $
# $Date: 2014-01-06 09:59:48 +0000 (Mon, 06 Jan 2014) $

# Initial Copyright © 2007 dimichxp <dimichxp@gmail.com>
# Modifications Copyright © 2007 Als <Als@exploit.in>

#---------------------------------------------------------------------------------------------------

import xmpp
import random

#---------------------------------------------------------------------------------------------------

VERSION_PENDING = [ ]
VERSION_REPLACE = { u'query': u'Результат', u'name': u'Клиент', u'version': u'Версия', u'os': u'ОС' }

#---------------------------------------------------------------------------------------------------

def version_run ( ptype, psource, pparameters ):
	global VERSION_PENDING

	liq = xmpp.Iq('get')
	lid = 'vers' + str(random.randrange(1000, 9999))
	VERSION_PENDING.append(lid)
	liq.setID(lid)
	liq.addChild('query', { }, [ ], 'jabber:iq:version');

	lparam = pparameters.split()
	if len(lparam) == 1:
		if GROUPCHATS.has_key(psource[1]):
			if lparam[0] not in GROUPCHATS[psource[1]].keys():
				reply(ptype, psource, u'что-то я его не вижу :(')
				return
			else:
				if GROUPCHATS[psource[1]][lparam[0]]['ishere'] == 0:
					reply(ptype, psource, u'убежал он... *PARDON*')
					return
			liq.setTo(psource[1] + u'/' + lparam[0])
			JCON.SendAndCallForResponse(liq, version_answer, { 'ptype': ptype, 'psource': psource })
		else:
			reply(ptype, psource, u'это возможно только в конференции...')
			return
	elif len(lparam) > 1:
		reply(ptype, psource, u'не понимаю я тебя... *PARDON*')
		return
	else:
		liq.setTo(psource[1] + u'/' + psource[2])
		JCON.SendAndCallForResponse(liq, version_answer, { 'ptype': ptype, 'psource': psource })

#---------------------------------------------------------------------------------------------------

def version_answer ( pcoze, pres, ptype, psource ):
	global VERSION_PENDING

	lid = pres.getID()
	if lid in VERSION_PENDING:
		VERSION_PENDING.remove(lid)
	else:
		reply(ptype, psource, u'что то не так... *SCRATCH*')
		return

	if pres.getType() == 'result':
		if len(pres.getChildren()) == 0:
			reply(ptype, psource, u'нет ничего... *PARDON*')
			return
		lanswer = u'>>>' + version_xmlparser(pres.getChildren(), 0)
	else:
		lanswer = u'зашифровался он... :-('

	reply(ptype, psource, lanswer)

#---------------------------------------------------------------------------------------------------

# Парсим xml
def version_xmlparser ( pitems, plevel ):
	lanswer = u''
	for litem in pitems:
		if len(litem.getChildren()) != 0 or len(litem.getData()) != 0:
			lindent = u'{:<%d}' % ( plevel * 4 )
			lname = litem.getName()
			if VERSION_REPLACE.has_key(lname):
				lname = VERSION_REPLACE[lname]
			lanswer += u'\n' + lindent.format(u'') + u'%s: %s' % ( lname, litem.getData() )
		if len(litem.getChildren()) != 0:
			lanswer += version_xmlparser(litem.getChildren(), plevel + 1)
	return lanswer

#---------------------------------------------------------------------------------------------------

register_command_handler(version_run, 'версия', [ 'инфо', 'мук', 'все' ], 0, 'Показывает информацию о клиенте, который юзает юзер или сервер', 'версия [ник\сервер]', [ 'версия', 'версия Nick', 'версия jabber.aq' ])

#---------------------------------------------------------------------------------------------------
